Шаг 257 - Что делать если нужно получить сгруппированные данные.

Данный вопрос стал после того, как я увидел новый авансовый отчет. Вот примерно такой он.

257_1.gif (5453 b)

Обратите внимание на ту гадость, что нам нужно в начала нужно получить сводные данные. То есть даже если все делать руками то придется два раза проходить по таблице. Но и сам язык 1С совсем не C++ для таких операций. Ведь счетов может быть много и они могут быть совершенно разные. Выход в такой ситуации в использовании запроса к самому себе.

Запрос = СоздатьОбъект("Запрос");
	 	ТекстЗапроса =
		"//{{ЗАПРОС(Сформировать)
	|Период с (ТекущийДокумент()) по (ТекущийДокумент());
	|ОбрабатыватьДокументы все;
	|КоррСчет = Документ.АвансовыйОтчет.СчетДляАванса.Счет;
	|НДС = Документ.АвансовыйОтчет.СуммаНДС;
	|Сумма = Документ.АвансовыйОтчет.СуммаСНДС;
	|Функция ИтогоПоСчету = Сумма(Сумма);
	|Функция НДСПоСчету = Сумма(НДС);
	|Группировка КоррСчет;
	|"//}}ЗАПРОС

Обратите внимание, что запрос идет к текущему документу. Вот такая хитрость. В нем же и указана группировка что бы получать сводные параметры по отчету. Дальше можно перебирать сгруппированные данные.

Пока Запрос.Группировка("КоррСчет") = 1 Цикл  
	Т.ВывестиСекцию("Секция_9");
КонецЦикла;

И выводить. Но при таком подходе документ должен быть записан. Читайте Шаг 256 - Программно пишем документ.

Hosted by uCoz